<?php

namespace app\index\controller;

use app\BaseController;
use app\index\model\User;
use app\middleware\AuthTokenMiddleware;
use tauthz\facade\Enforcer;
use think\App;
use think\facade\Cache;
use think\middleware\FormTokenCheck;
use think\Model;
use think\Request;

class Index extends BaseController
{
    //protected $request;

    /**
     * 对象变量通过依赖注入生成.
     * @param Request $request
     */
    /*public function __construct(Request $request)
    {
        $this->request = $request;
    }*/

    // 对于自定义的类以及方法，如果需要使用依赖注入，需要使用系统提供的 invoke 助手函数调用。

    public function index(Request $request)
    {
        halt($request);
        echo root_path().'\n'; echo base_path().'\n'; echo app_path().'\n'; echo config_path().'\n';
        echo runtime_path()."<br/>";

        dump(\app('cache', ['file']));
        // 获取配置值
        dump(config('test'));
        // 调试变量信息并中断，相当于 var_dump();exit();
        halt('123');


    }

    public function hello(string $name = 'ThinkPHP6')
    {
        return 'hello,' . $name;
    }

    public function detail($user, $id)
    {
        return $user.' id is '.$id;
    }

    public function create($create, $id)
    {
        return $create . ' function id is '. $id;
    }

    /**
     * 获取当前应用名
     * @return mixed
     */
    /*public function name()
    {
        return app('http')->getName();
    }*/

    /**
     * 核心门面facade类设置缓存
     * 事实上，依赖注入和使用Facade代理的效果大多数情况下是一样的，都是从容器中获取对象实例。例如：
     */
    public function setCache()
    {
        Cache::set('name', 'phpzhi1');
        echo \cache('name');
    }

    public function zhi(\think\Request $request)
    {
        //return $request->server('DOCUMENT_ROOT');
        // 登录之后
        //event('UserLogin','phpzhi');
        //return $request->param('name');

        //return Enforcer::getAllActions();

        /**
         * @ptype ?类型
         * @v0 用户名
         * @v1 角色
         * @v2 权限
         */
        dump(Enforcer::addRoleForUser('alice', 'data2_admin'));
        dump(Enforcer::addRoleForUser('alice', 'data3_admin'));
        dump(Enforcer::addPermissionForUser('phpzhi', 'read'));
        dump(Enforcer::addGroupingPolicy('维护人员', 'maintain', 'edit'));

        dump(Enforcer::getAllRoles());
        dump(Enforcer::getPolicy());
        dump(Enforcer::getGroupingPolicy());
        dump(Enforcer::getRolesForUser("alice"));
        dump(Enforcer::getUsersForRole("maintain"));
        dump(Enforcer::getPermissionsForUser("user2"));
    }

}
